﻿package com.google.code.p.ivans.patternsentities;

import java.util.ArrayList;
import java.util.List;

public class SubMenu implements Menu {
	
	private String title;
	private List<Menu> parts = new ArrayList<Menu>();
	
	private SubMenu parent;
	
	public SubMenu() {}
	
	public SubMenu(String title) {
		this.title = title;				
	}
	
	public SubMenu(String title, SubMenu parent) {
		this.title = title;				
		this.parent = parent;
	}
	
	public void addMenu(Menu menu) {
		parts.add(menu);
		
		if(menu instanceof SubMenu) {
			((SubMenu)menu).setParent(this);
		}
	}

	@Override
	public void render() {
		System.out.println("----" + title.toUpperCase() + "----");
		
		if(parent != null) {
			System.out.println("0 - назад");
		}
		for(int i = 0; i < parts.size(); i++) {			
			Menu menu = parts.get(i);
			
			System.out.print((i + 1) + " - ");
			
			// если подменю
			if(menu instanceof SubMenu) {				
				((SubMenu)menu).renderTitle();
				continue;
			}
			
			// если menuItem
			menu.render();
		}	
		System.out.println("-1 - выход\n>>");	
		
	}
	
	public void click() {
		int choice = Main.getApplication().getChoice();
		
		if(choice == -1) {
			System.exit(0);
		}
		
		if(choice == 0) {
			if(parent != null) {
				Main.getApplication().setSubMenu(parent);
			}
			return;
		}
		
		// если кликнули на SubMenu
		if(parts.get(choice - 1) instanceof SubMenu) {
			Main.getApplication().setSubMenu((SubMenu)parts.get(choice - 1));
			return;
		}
		
		// если кликнули на MenuItem	
		parts.get(choice - 1).click();
				
	}
	
	public void renderTitle() {
		System.out.println(title);
	}
	
	public void setParent(SubMenu parent) {
		this.parent = parent;
	}
	
	public boolean isCanUp() {
		if(parent != null)
			return true;
		
		return false;
	}
	
	public SubMenu getParent() {
		return parent;
	}
}
